//
//  XMStatusViewModel.swift
//  XMWeimo
//
//  Created by ios001 on 16/7/24.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

// 该viewModel 为cell (原创微博转发微博和底部视图服务)
class XMStatusViewModel: NSObject {
    // 定义一个属性
    var status: XMStatus?
    // 微博认证用户图片
    var avatarImage: UIImage?
    // 处理会员等级图片
    var memberImage: UIImage?
    // 微博来源处理富文本
    var sourceAttr: NSMutableAttributedString?
    
    // 转发数
    var repostsCountstr: String?
    // 评论数
    var commentsCounStr: String?
    // 表态数
    var attitudesCountStr: String?
    
    // 微博事件(只读属性,计算型)
    var sinaTimeStr: String?{
        return NSDate.sinaDate(status?.created_at ?? "")?.sinaDescripitionStr
    }
    // 原创微博富文本
    var originalContentAttr: NSMutableAttributedString?
    // 转发微博富文本
    var retweetContentAttr: NSMutableAttributedString?
    
    // 重载构造函数
    init(status: XMStatus) {
        super.init()
        self.status = status
        // 在viewModel调用重载函数初始化的时候,我们要对avatarImage&memberImage 赋值
        // 微博会员等级
        self.memberImage = getMemberImage(status.user?.mbrank)
        // 微博认证用户
        self.avatarImage = getAvatarImage(status.user?.verified)
        self.sourceAttr = getSourceStr(status.source)
        self.repostsCountstr = getSinaCount(status.reposts_count, title: "转发")
        self.commentsCounStr = getSinaCount(status.comments_count, title: "评论")
        self.attitudesCountStr = getSinaCount(status.attitudes_count, title: "赞")
        self.originalContentAttr = dealContentText(status.text)
        self.retweetContentAttr = dealContentText(status.retweeted_status?.text)
    }
}

// MARK: - 处理微博转发评论赞的业务逻辑
extension XMStatusViewModel {
    func getSinaCount(count: Int, title: String) -> String {
        // 如果count <= 0
        if count <= 0 {
            return title
        }else {
            // count = 0
            // < 10000
            if count < 10000 {
                return "\(count)"
            }else {
                let sinaCount = CGFloat(count/1000)/10
                // 字符串拼接
                var sinaCountStr = "\(sinaCount)万"
                // 如果字符串包含.0
                if sinaCountStr.containsString(".0") {
                    // 字符串转换 这边使用替换的方法
                    sinaCountStr = sinaCountStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return sinaCountStr
            }
        }
    }
}

// MARK: - 数据处理
extension XMStatusViewModel {
    // 处理微博认证用户图片 //认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    func getAvatarImage(verified: Int?) -> UIImage?{
        // 判断是否为nil
        guard let ver = verified else{
            return nil
        }
        
        switch ver {
        case 1:
            return UIImage(named: "avatar_vip")
        case 2,3,4:
            return UIImage(named: "avatar_enterprise_vip")
        case 220:
            return UIImage(named: "avatar_grassroot")
        default:
            return UIImage(named: "avatar_vgirl")
        }
    }
    
    // 处理会员等级图片 等级1-6
    func getMemberImage(mbrank: Int?) -> UIImage?{
        // 判断是否为nil
        guard let mbr = mbrank else {
            return nil
        }
        if mbr > 0 && mbr < 7{
            return UIImage(named: "common_icon_membership_level\(mbr)")
        }
        return UIImage(named: "common_icon_membership")
    }
    
    // 处理表情字符串
    /*
    01 [笑cry]     chs
    02 emoticon.chs   如果相同的 emoticon
    03 通过emoticon.path  得到image  文本附件  富文本
    
    */
    func dealContentText(text: String?) -> NSMutableAttributedString?{
        //        printLog(text)
        // 判断是否有值
        guard let t = text else{
            return nil
        }
        
        // 得到富文本
        let allTextAttr = NSMutableAttributedString(string: t)
        
        
        // 正则格式
        let regex = "\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]"
        // 遍历字符串 01 匹配的个数 02 匹配的结果 03 匹配的范围 04 匹配是否停止
        
        // 正向遍历 导致富文本越界 崩溃
        /*
        解决方法
        创建一个模型
        创建一个可变的临时数组 保存这个模型
        通过当前模型到表情一维数组找对应的emoticon
        得到富文本
        替换富文本
        */
        // 创建一个临时可变数组
        var tempArray:[XMMatchResult] = [XMMatchResult]()
        
        (t as NSString).enumerateStringsMatchedByRegex(regex) { (count, string, range, _) -> Void in
            printLog(string.memory)
            // 创建一个模型
            let matchResult = XMMatchResult(string: string.memory as? String, range: range.memory)
            tempArray.append(matchResult)
        }

        // 倒着遍历数组
        for match in tempArray.reverse() {
            guard let emoticon = XMEmoticonTools.sharedTools.searchEmoticons(match.string) else{
                continue
            }
            let lineHeight = UIFont.systemFontOfSize(15).lineHeight
            let attr = NSAttributedString(emoticon: emoticon, y: -4, lingHeight: lineHeight)
            allTextAttr.replaceCharactersInRange(match.range, withAttributedString: attr)
        }
        return allTextAttr
    }

}

// 当前认为是MVVM开发模式
extension XMStatusViewModel{
    // 格式,来自 XXX
    func getSourceStr(source: String?) -> NSMutableAttributedString {
//        print("瞧一瞧")
        // 判断是否为nil,而且是否保存 ">
        guard let s = source where s.containsString("\">") else{
            let str = "天马行空乱七八糟"
            return getSourceAttr(str)
        }
        // 起始位置和结束位置
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        
        // 字符串截取
        let result = s.substringWithRange(startRange.endIndex..<endRange.startIndex)
        return getSourceAttr(result)
    }
    
    // 处理微博来源的富文本
    func getSourceAttr(result: String) -> NSMutableAttributedString {
        // 最终显示格式
        let name = "来自 " + result
        // 得到range
        let range = (name as NSString).rangeOfString("来自")
        // 创建一个可变富文本
        let attr = NSMutableAttributedString(string: name)
        // 设置属性
        attr.addAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], range:range)
        return attr
    }
}
